%{
/* need this for the call to atof() below */
#include <math.h>
/* need this for printf(), fopen() and stdin
below */
#include <stdio.h>
%}
DIGIT	[0-9]
ID		[a-z][a-z0-9]*

%%

{DIGIT}+ {
	printf("An integer: %s (%d)\n", yytext,
	atoi(yytext));
}

{DIGIT}+"."{DIGIT}* {
	printf("A float: %s (%g)\n", yytext,
	atof(yytext));
}

if|then|begin|end|procedure|function {
	printf("A keyword: %s\n", yytext);
}

{ID} {
	printf("An identifier: %s\n", yytext);
}

"+"|"-"|"*"|"/" {
	printf("An operator: %s\n", yytext);
}

"{"[^}\n]*"}" {
	; /* eat up one-line comments */
}
[ \t\n]+ {
	; /* eat up white space */
}

. {
	printf("Unrecognized character: %s\n", yytext);
}

%%
int main(int argc, char *argv[]) {
	++argv, --argc; /* skip over program name */
	if (argc > 0)
		yyin = fopen(argv[0], "r");
	else
		yyin = stdin;
	yylex();
}
